index 1d1badd..0aff4d5 100644
--- a/src/des_crypt.c
+++ b/src/des_crypt.c
@@ -67,6 +67,7 @@ static int common_crypt( char *, char *, unsigned, unsigned, struct desparams *
 /*
  * CBC mode encryption
  */
+#ifndef HAVE_CBC_CRYPT
 int
 cbc_crypt(key, buf, len, mode, ivec)
 	char *key;
@@ -89,11 +90,13 @@ cbc_crypt(key, buf, len, mode, ivec)
 	COPY8(dp.des_ivec, ivec);
 	return(err);
 }
+#endif
 
 
 /*
  * ECB mode encryption
  */
+#ifndef HAVE_ECB_CRYPT
 int
 ecb_crypt(key, buf, len, mode)
 	char *key;
@@ -111,12 +114,14 @@ ecb_crypt(key, buf, len, mode)
 #endif
 	return(common_crypt(key, buf, len, mode, &dp));
 }
+#endif
 
 
 
 /*
  * Common code to cbc_crypt() & ecb_crypt()
  */
+#if !defined(HAVE_CBC_CRYPT) || !defined(HAVE_ECB_CRYPT)
 static int
 common_crypt(key, buf, len, mode, desp)
 	char *key;
@@ -144,3 +149,4 @@ common_crypt(key, buf, len, mode, desp)
 
 	return(desdev == DES_SW ? DESERR_NONE : DESERR_NOHWDEVICE);
 }
+#endif
diff --git a/src/getpublickey.c b/src/getpublickey.c
index 764a5f9..a09acb7 100644
--- a/src/getpublickey.c
+++ b/src/getpublickey.c
@@ -38,8 +38,6 @@
 #include <pwd.h>
 #include <rpc/rpc.h>
 #include <rpc/key_prot.h>
-#include <rpcsvc/yp_prot.h>
-#include <rpcsvc/ypclnt.h>
 #include <string.h>
 #include <stdlib.h>
 
diff --git a/src/rpcdname.c b/src/rpcdname.c
new file mode 100644
index 0000000..3e6a988
--- /dev/null
+++ b/src/rpcdname.c
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2009, Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * - Redistributions of source code must retain the above copyright notice,
+ *   this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ *   this list of conditions and the following disclaimer in the documentation
+ *   and/or other materials provided with the distribution.
+ * - Neither the name of Sun Microsystems, Inc. nor the names of its
+ *   contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * rpcdname.c
+ * Gets the default domain name
+ */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+static char *default_domain = 0;
+
+static char *
+get_default_domain()
+{
+	char temp[256];
+
+	if (default_domain)
+		return (default_domain);
+	if (getdomainname(temp, sizeof(temp)) < 0)
+		return (0);
+	if ((int) strlen(temp) > 0) {
+		default_domain = (char *)malloc((strlen(temp)+(unsigned)1));
+		if (default_domain == 0)
+			return (0);
+		(void) strcpy(default_domain, temp);
+		return (default_domain);
+	}
+	return (0);
+}
+
+/*
+ * This is a wrapper for the system call getdomainname which returns a
+ * ypclnt.h error code in the failure case.  It also checks to see that
+ * the domain name is non-null, knowing that the null string is going to
+ * get rejected elsewhere in the NIS client package.
+ */
+int
+__rpc_get_default_domain(domain)
+	char **domain;
+{
+	if ((*domain = get_default_domain()) != 0)
+		return (0);
+	return (-1);
+}
